/* 
1.给定两个数组 nums1 和 nums2 ，返回它们的交集。输出结果中的每个元素一定是唯一的。可以不考虑输出结果的顺序 。
输入：nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出：[9,4]
解释：[4,9] 也是可通过的。
*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define BUFFER_SIZE1 5
#define BUFFER_SIZE2 7

#define BUFFER_SIZE 2
#define SIZE 10

int swapNum(int *val1, int *val2)
{
    int tmpVal = *val1;
    *val1 = *val2;
    *val2 = tmpVal;
    return 0;
}

/* 升序(从小到大) */
int bubbleSort02(int *nums, int numSize)
{
    /* 定义一个标记 */
    int sorted = 0;
    for (int end = numSize; end > 0 ; end--)
    {
        sorted = 1; //已排好
        /* 一轮 */
        for (int begin = 1; begin < end; begin++)// 每一趟就会少一个数比较
        {

            if(nums[begin - 1] > nums[begin]) // 这是升序排法
            {
                /* 没有排好 */
                sorted = 0;
                /* swap */
                swapNum(&(nums[begin - 1]), &(nums[begin]));
            }
            
        }

        /* 已经排好序 */
        if (sorted == 1)
        {
            break;
        }
    }
    return 0;

}


/*  去重 */
int removeDuplicates(int * nums, int numsSize)
{
    if (nums == NULL)
    {
        return 0;
    }

    if (numsSize <= 1)
    {
        return numsSize;
    }
    int index = 1;
    for (int idx = 1; idx < numsSize; idx++)
    {
        if (nums[idx - 1] != nums[idx])
        {
            nums[index++] = nums[idx];
        }
    }
    return index;
}

int twoIntersectingElements(int *nums1, int *nums2, int numsSize1, int numsSize2)
{
    int array[SIZE] = { 0 }; // 根据实际情况调整数组大小

    int interSection[SIZE] = { 0 };
    /* 记录重复的数的个数*/
    int pos = 0;

    for (int idx = 0; idx < numsSize1; idx++) 
    {
        array[nums1[idx]] = 1;
    }
    
    for (int idx = 0; idx < numsSize2; idx++) 
    {
        if (array[nums2[idx]] == 1) 
        {
            printf("%d\n", nums2[idx]);
            interSection[pos] = nums2[idx];
            pos++;
        }
    }
    printf("pos = %d\n", pos);   

    /* 先排序 */
    bubbleSort02(interSection, pos);

    /* 去掉重复值 */
    int ret = removeDuplicates(interSection, pos);

    for (int idx = 0; idx < ret; idx++)
    {
        printf("interSection[%d] = %d\n", idx, interSection[idx]);
    }

    printf("ret = %d\n", ret);

    return 0;
}


int main()
{
    int nums1[BUFFER_SIZE1] = {4, 9, 5, 3, 2};
    int nums2[BUFFER_SIZE2] = {9, 4, 9, 8, 4, 3, 2};
    twoIntersectingElements(nums1, nums2, BUFFER_SIZE1, BUFFER_SIZE2);
  
    return 0;
}